//引用express框架
const express = require('express');
//引入路径模块
const path = require('path');
//引入body-parse 用于处理post请求参数
const bodyParser = require('body-parser');
//引入cookie和session模块
const session = require('express-session');
//引入art-template
const template = require('art-template');
//引入日期格式化模块
const dateFormat = require('dateformat');
//创建网站服务器
const app = express();
//引入数据库连接
require('./model/connect.js');
//引入morgan第三方模块
const morgan = require('morgan');
//引入config模块
const config = require('config');

//处理post请求参数  false使用queryString模块  true 使用qs模块解析
app.use(bodyParser.urlencoded({ extended: false }));
app.use(bodyParser.json());

app.use(session({
    secret: 'secret key',
    saveUninitialized: false, //在无登陆状态不创建session
    cookie: {
        //毫秒为单位
        maxAge: 24 * 60 * 60 * 1000
    }
}));
// //初始化登录
// require('./model/user');
//告诉express框架模板位置，默认后缀
app.set('views', path.join(__dirname, 'views'));
app.set('view engine', 'art');
//当渲染后缀为art所使用的模板引擎是什么
app.engine('art', require('express-art-template'));
//像模版内部导入dateformat模板
template.defaults.imports.dateFormat = dateFormat;

//开放静态资源文件
app.use(express.static(path.join(__dirname, 'public')));
console.log(config.get('title'));
//获取环境变量 返回值对象
if (process.env.NODE_ENV == 'development') {
    //当前是开发环境
    console.log('当前是开发环境');
    //在开发环境中 将客户端的请求信息打印在控制台
    app.use(morgan('dev'))
} else { //当前是生成环境
    console.log(process.env);
    console.log('当前是生产环境');
}
//引入路由模块
const home = require('./route/home');
const admin = require('./route/admin');
const { nextTick } = require('process');


//未登录拦截
app.use('/admin', require('./middleware/loginGuard'));


//为路由匹配请求路径
app.use('/home', home);
app.use('/admin', admin);

//Express错误处理中间件
app.use((err, req, res, ) => {
    //err接收next()中的参数，需将字符串转变为对象 JSON.parse()
    const result = JSON.parse(err);
    let params = [];
    for (let attr in result) {
        if (attr != 'path') {
            params.push(attr + '=' + result[attr]);
        }
    }
    res.redirect(`${result.path}?${params.join('&')}`);
})

//监听窗口
app.listen(3000);
console.log('网站服务器启动成功');